#ifndef REGION_REMAP_H
#define REGION_REMAP_H

#include <string>
#include <unordered_map>
#include <fstream>
#include <iostream>
#include <nlohmann/json.hpp>

#include "conf.h"

class RegionRemap {
public:
    // 构造函数（可指定文件路径进行加载）
    explicit RegionRemap(const std::string& filePath = "") {
        if (!filePath.empty()) {
            load(filePath);
        }
    }

    // 析构函数（默认）
    ~RegionRemap() = default;

    // 加载字典
    bool load(const std::string& filePath) {
        std::ifstream inFile(filePath);
        if (!inFile.is_open()) {
            err_log("cannot open file(%s)", filePath.c_str());
            return false;
        }

        try {
            // 将 地区字符串和音频文件 加入 map 中
            nlohmann::json j;
            inFile >> j;
            dict_.clear();
            for (auto& [key, value] : j.items()) {
                dict_[key] = value;
            }
        } catch (std::exception& e) {
            err_log("load json error: %s", e.what());
            return false;
        }

        return true;
    }

    // 保存字典到文件
    // bool save(const std::string& filePath) const {
    //     std::ofstream outFile(filePath);
    //     if (!outFile.is_open()) {
    //         std::cerr << "无法写入文件: " << filePath << std::endl;
    //         return false;
    //     }

    //     nlohmann::json j(dict_);
    //     outFile << j.dump(4);  // 缩进4个空格，美化输出
    //     return true;
    // }

    // 查找
    std::string lookup(const std::string& key) const {
        auto it = dict_.find(key);
        // 判断是否找到了，找到的话返回对应的value，否则返回空string
        return it != dict_.end() ? it->second : "";
    }

    // // 添加或更新
    // void insert(const std::string& key, const std::string& value) {
    //     dict_[key] = value;
    // }

    // // 删除
    // bool remove(const std::string& key) {
    //     return dict_.erase(key) > 0;
    // }

private:
    std::unordered_map<std::string, std::string> dict_;
};


#endif // REGION_REMAP_H
